package com.cdie.myschool.domain.entity;

import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cdie.myschool.common.Constant;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
    * 图书馆通行记录
    */
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "library_pass_through_record")
public class LibraryPassRecordOld {

    private static final Long INTERVAL_MINUTE = 600L;
    /**
     * 主键
     */
    @TableField(value = "ID")
    private String id;

    /**
     * 设备编号
     */
    @TableField(value = "SBBH")
    private String sbbh;

    /**
     * 人员编码
     */
    @TableField(value = "RYBM")
    private String rybm;

    /**
     * 进出类型(1:进 2:出)
     */
    @TableField(value = "JCLX")
    private String jclx;

    /**
     * 通行时间
     */
    @TableField(value = "TXSJ")
    private String txsj;

    /**
     * 设备名称
     */
    @TableField(value = "SBMC")
    private String sbmc;

    /**
     * 设备位置
     */
    @TableField(value = "SBWZ")
    private String sbwz;

    /**
     * 时间戳
     */
    @TableField(value = "TSTAMP")
    private String tstamp;

    /**
     * 计算两段数据时间间隔(分钟)  无效则返回-1
     * @param source 目标对象
     * @return 间隔分钟数
     */
    public Long calculateMinuteInterval(LibraryPassRecordOld source){
        //1.进出类型不同  且  人员编码相同
        if(!this.jclx.equals(source.getJclx()) && this.rybm.equals(source.getRybm()) ){
            Date stepIn = null;
            Date stepOut = null;
            //获取进出时间
            if(Constant.PASS_TYPE_IN.equals(Byte.parseByte(this.jclx))){
                stepIn = DateUtil.parse(this.txsj);
                stepOut = DateUtil.parse(source.txsj);
            }else{
                stepOut = DateUtil.parse(this.txsj);
                stepIn = DateUtil.parse(source.txsj);
            }
            //两段时间间隔分钟数
            long interval = DateUtil.between(stepIn,stepOut, DateUnit.MINUTE);
            //2.出馆时间大于在馆时间  且  在馆时间小于等于600min
            if (stepOut.after(stepIn)  &&  interval <= INTERVAL_MINUTE){
                return interval;
            }
        }

        return -1L;
    }

    public LibraryPassRecordOld getOutRecord(LibraryPassRecordOld source){
        return "2".equals(this.jclx) ? this : source;
    }
}
